package KnowSparkSQL.DSL.DatasetSort;

import org.apache.spark.sql.Column;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;

/**
 * 2.1.Dataset<Row>.orderBy(xxx)方法
 * 作用是按照指定的列名（一列或多列）对Dataset<Row>的数据进行排序，
 * 默认是升序，也可以指定降序排序。
 * 参数可以是字符串类型的可变参数，
 * 也可以是Column类型的可变参数。
 * 两者主要区别是：后者可以通过调用desc方法来指定降序排序，
 * 前者只能是默认的升序排序。
 * 如orderBy(new Column(“age”).desc())表示按照年龄进行降序排序。
 * 返回值是Dataset<Row>类型对象
 */
public class SparkSQLSort {
    public static void main(String[] args) {
        SparkSession sparkSession = SparkSession.builder().appName(SparkSQLSort.class.getName()).master("local").getOrCreate();

        Dataset<Row> json = sparkSession.read().json("./data/student.json");

        json.orderBy(new Column("age").desc(), new Column("name").asc()).show((int) json.count());


    }
}
